﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace StreamingServer
{
    /*该类的主要功能是查找磁盘中是否有文件
     *文件是否真实存在
     */
    class FileFind
    {
        #region 摘自http://www.cnblogs.com/hl3292/archive/2011/01/21/1940918.html
        string aaaa = "F:\\notebook\\haha\\";//路径的正确写法 
        /// <summary>
        ///判断文件夹的存在、创建、删除文件夹  
        /// </summary>
        public void FindFolder()
        {
            //判断文件夹的存在、创建、删除文件夹             
           if (Directory.Exists(aaaa))//如果不存在就创建file文件夹 
            {
                MessageBox.Show("存在文件夹");
                //Directory.Delete(aaaa, false);//如果文件夹中有文件或目录，此处会报错 
                //Directory.Delete(aaaa, true);//true代表删除文件夹及其里面的子目录和文件 
            }
            else
            {
                MessageBox.Show("不存在文件夹");
                Directory.CreateDirectory(aaaa);//创建该文件夹 
            }
        }

        /// <summary>
        /// 判断文件的存在、创建、删除文件 
        /// </summary>
        public void FindFile()
        {
            //判断文件的存在、创建、删除文件 
            string dddd = aaaa + "11.txt";
            if (File.Exists(dddd))
            {
                MessageBox.Show("存在文件");
                File.Delete(dddd);//删除该文件 
            }
            else
            {
                MessageBox.Show("不存在文件");
                File.Create(dddd);//创建该文件，如果路径文件夹不存在，则报错。 
            }
        }

        public void DellFile(string path)
        {
            //删除文件 
             if (File.Exists(path))
            {                
                File.Delete(path);//删除该文件
                 MessageBox.Show("文件删除成功");
            }
        }
        #endregion
        #region 遍历文件夹，找出所有文件
        /// <summary>
        /// 遍历文件夹找出所有文件
        /// </summary>
        /// <param name="floder"></param>
        public void FindFile(string folderFullName,ListView listview)
        {
            
            DirectoryInfo TheFolder = new DirectoryInfo(folderFullName);
            //遍历文件夹 
            //foreach(DirectoryInfo NextFolder in TheFolder.GetDirectories()) 
            //    this.listBox1.Items.Add(NextFolder.Name);
            //遍历文件 
            FileInfo[] files = TheFolder.GetFiles();
            foreach (FileInfo NextFile in files)
            {
                ListViewItem item = new ListViewItem(); //想要添加多行，必须要new ListViewItem
                if (NextFile.Name != null)
                {
                    //listview.Items.Add(NextFile.Name);//此处是将所有文件信息添加到第一列当中，
                    //需要添加到指定列中，见http://www.datazx.cn/Forums/en-US/3e4b74c8-2df0-482a-b787-6a1af3f83d49/action?threadDisplayName=listview&forum=visualcshartzhchs
                    item.SubItems[0].Text = NextFile.Name;
                    //item.SubItems.Add("ss");
                    item.SubItems.Add(NextFile.DirectoryName);
                    item.SubItems.Add(Convert.ToString(NextFile.Length/1024/1024));
                    listview.Items.Add(item);  
                }  
            }
        }
        #endregion
        /// <summary>
        /// 创建索引函数
        /// </summary>
        /// <param name="PareDirectory"></param>
        public void CreateIndex(object PareDirectory, ListView listview)
        {
            string[] Files = Directory.GetFiles(PareDirectory.ToString());//文件列表
            //string[] DirectoryInfos = Directory.GetDirectories(PareDirectory.ToString());//文件夹列表
            //int DirectoryCount = DirectoryInfos.Length;//子文件夹个数
            for (int k = 0; k < Files.Length; k++)
            {
                try
                {
                    //if (Files[k].Contains("$RECYCLE.BIN")) File.Delete(Files[k]);
                    //else //WriteText(Files[k]);
                    //遍历文件  
                    foreach (string getfile in Files)
                    {
                        if (getfile != null)
                        {
                            listview.Items.Add(getfile);
                        }
                    }
                }
                catch
                {
                    continue;
                }
            }
            //for (int i = 0; i < DirectoryCount; i++)
            //{
            //    try
            //    {
            //        if ((new DirectoryInfo(DirectoryInfos[i]).Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
            //        {
            //            continue;
            //        }
            //        CreateIndex(DirectoryInfos[i]);
            //    }
            //    catch
            //    {
            //        continue;
            //    }
            //}

        }


    }
}
